from django.db import models
from django.contrib.auth.models import Group
# Create your models here.
from baykeadmin.common.models import BaseModelMixin


class BaykeSystemMenu(BaseModelMixin):
    """菜单"""

    class MenuType(models.TextChoices):
        """菜单类型"""
        MENU = 'menu', '菜单'
        BUTTON = 'button', '按钮'
        IFARME = 'iframe', 'iframe'
        LINK = 'link', '链接'

    name = models.CharField(
        max_length=20, 
        verbose_name='菜单名称(name)', 
        help_text="前端组件名称一致"
    )
    path = models.CharField(max_length=50, verbose_name='菜单Path', blank=True, default='')
    component = models.CharField(
        max_length=50, 
        verbose_name='前端组件', 
        blank=True, 
        default=''
    )
    parent = models.ForeignKey(
        'self', 
        on_delete=models.CASCADE, 
        verbose_name='父菜单', 
        null=True, blank=True
    )
    redirect = models.CharField(
        max_length=50, 
        verbose_name='重定向', 
        blank=True, 
        default=''
    )
    # *** 以下字段为菜单元信息，前端需要使用 ****
    # *title	显示名称。展示在菜单，标签和面包屑等中
    # hidden	是否隐藏菜单，大部分用在无需显示在左侧菜单中的页面，比如详情页
    # affix	是否固定，类似首页控制台在标签中是没有关闭按钮的
    # icon	显示图标，建立2级菜单都设置图标，否则菜单折叠都将显示空白
    # *type	类型：菜单，Iframe，外链，按钮
    # hiddenBreadcrumb	是否隐藏面包屑
    # active	左侧菜单的路由地址活动状态，比如打开详情页需要列表页的菜单活动状态
    # color	颜色值
    # fullpage	是否整页打开路由（脱离框架系），例如：fullpage: true
    # role	静态路由时，所能访问路由的角色，例如：role: ["SA"]
    meta = models.JSONField(verbose_name='菜单元信息', blank=True, default=dict)
    roles = models.ManyToManyField(
        Group, 
        verbose_name='菜单角色',
        blank=True
    )
    sort = models.IntegerField(verbose_name='菜单排序', default=0)

    class Meta:
        verbose_name = '菜单'
        verbose_name_plural = verbose_name
        ordering = ['sort']

    def __str__(self):
        return self.name